//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Στο παρόν περιλαμβάνονται τα σχετικά με το control panel της εφαρμογής. Το control panel
// είναι μια κάθετη στήλη εργαλείων κάπου στο μέσον της σελίδας. Τα εργαλεία εμφανίζονται
// με τη μορφή πλήκτρων μέσω των οποίων ο χρήστης επιτελεί διάφορες εργασίες, π.χ. απόκρυψη
// διαφημίσεων, αλλαγή παρασκηνίου, δημιουργία τραπεζιού κλπ.

// Τα αντικείμενα της κλάσης "Cpliktro" είναι τα πλήκτρα τού control panel και περιλαμβάνουν
// συγκεκριμένα properties:
//
//	n	Προαιρετική ονομασία του πλήκτρου. Παρέχονται μέθοδοι σκηνικού με τις οποίες
//		μπορούμε να προσπελάσουμε το πλήκτρο με αυτήν την ονομασία.
//
//	o	Η ομάδα εργαλείων στην οποία εντάσσεται το πλήκτρο. Πράγματι, το control panel
//		είναι διαρθρωμένο κατά ομάδες οι οποίες είναι απλώς αριθμοί με την πρώτη ομάδα
//		να φέρει τον αριθμό 0. Αν κάποιο πλήκτρο στερείται ομάδας, τότε εμφανίζεται σε
//		όλες τις ομάδες.
//
//	i	Το image file της εικόνας του πλήκτρου κάτω από το directory "ikona".
//
//	t	Ο τίτλος που εμφανίζεται όταν ο χρήστης τοποθετεί τον δείκτη στο πλήκτρο.
//
//	a	Function που θα κληθεί ως μέθοδος του πλήκτρου όταν κάνουμε κλικ στο πλήκτρο.
//		Η μέθοδος δέχεται ως παράμετρο το "click" event που την ενεργοποίησε και στο
//		οποίο ακυρώνεται αυτόματα το propagation. Μέσα στην μέθοδο  προσπελαύνουμε το
//		σκηνικό με το όνομα "skiniko".
//
//	c	Function που θα κληθεί ως μέθοδος του πλήκτρου και δέχεται ως παραμέτρους το
//		σκηνικό, την συνεδρία και το τραπέζι του χρήστη. Αν η μέθοδος επιστρέψει true
//		το πλήκτρο εμφανίζεται, αλλιώς όχι. Αν δεν υπάρχει το property το πλήκτρο είναι
//		πάντα εμφανές στην ομάδα του.
//
//	DOM	Πρόκειται για παράγωγη property που δείχνει το DOM element του συγκεκριμένου
//		πλήκτρου και δημιουργείται κατά την κατασκευή.

Cpliktro = function(props) {
	var cpliktro = this;

	globals.initObject(this, props, {
		functions: true
	}).
	DOM = $('<div>').addClass('cpliktro').
	on('mouseenter', function(e) {
		e.stopPropagation();
		cpliktro.isAction() &&
		$(this).addClass('cpliktroOplisate');
	}).
	on('mouseleave', function(e) {
		e.stopPropagation();
		$(this).removeClass('cpliktroOplisate');
	}).
	on('click', function(e) {
		e.stopPropagation();
		cpliktro.normalAction() &&
		cpliktro.actionGet().call(cpliktro, e);
	}).append(this.iconDOM = $('<img>').addClass('cpliktroIcon').attr({
		src: 'ikona/' + this.i,
		title: this.t,
	}));
}

Cpliktro.prototype.onomaGet = function() {
	return this.n;
}

Cpliktro.prototype.isOmada = function() {
	return this.hasOwnProperty('o');
}

Cpliktro.prototype.oxiOmada = function() {
	return !this.isOmada();
}

Cpliktro.prototype.omadaGet = function() {
	return parseInt(this.o);
}

Cpliktro.prototype.titlosGet = function() {
	return this.t;
}

Cpliktro.prototype.imageGet = function() {
	return this.i;
}

Cpliktro.prototype.isAction = function() {
	return this.hasOwnProperty('a');
}

Cpliktro.prototype.oxiAction = function() {
	return !this.isAction();
}

Cpliktro.prototype.actionGet = function() {
	return this.a;
}

Cpliktro.prototype.normalAction = function() {
	return(typeof this.actionGet() === 'function');
}

Cpliktro.prototype.isCheck = function() {
	return this.hasOwnProperty('c');
}

Cpliktro.prototype.oxiCheck = function() {
	return !this.isCheck();
}

Cpliktro.prototype.checkGet = function() {
	return this.c;
}

Cpliktro.prototype.cpliktroGetDOM = function() {
	return this.DOM;
}

Cpliktro.prototype.cpliktroIconGetDOM = function() {
	return this.iconDOM;
}

Cpliktro.prototype.apokripsi = function() {
	this.cpliktroGetDOM().css({display: 'none'});
	return this;
}

Cpliktro.prototype.emfanisi = function() {
	this.cpliktroGetDOM().css({display: 'block'});
	return this;
}

// Με την μέθοδο "ikona" αλλάζουμε την εικόνα του πλήκτρου. Ως παράμετρο περνάμε το
// αρχείο εικόνας κάτω από το directory "ikona", ενώ αν δεν περάσουμε αρχείο εικόνας
// επαναφέρουμε την αρχική εικόνα του πλήκτρου.

Cpliktro.prototype.ikona = function(img) {
	if (img === undefined) img = this.imageGet();
	this.cpliktroIconGetDOM().attr({
		src: 'ikona/' + img,
	});
	return this;
}

Cpliktro.prototype.titlos = function(titlos) {
	if (titlos === undefined) titlos = this.titlosGet();
	this.cpliktroGetDOM().attr({
		title: titlos,
	});
	return this;
}

// Μερικές φορές επιθυμούμε κάποιο πλήκτρο να φαίνεται καλύτερα από τα υπόλοιπα, π.χ.
// όταν έχουμε πατήσει το ραδιοφωνάκι και αυτό παίζει μπορούμε να κάνουμε εμφανές το
// πλήκτρο του ραδιοφώνου για όσο χρόνο το ραδιόφωνο παραμένει ενεργό.

Cpliktro.prototype.emfanes = function(on) {
	var dom = this.cpliktroGetDOM();
	if (on === undefined) on = true;
	if (on) dom.addClass('cpliktroEmfanes');
	else dom.removeClass('cpliktroEmfanes');
	return this;
}

// Μερικές φορές επιθυμούμε να υποδεικνύουμε στιγμιαία κάποιο πλήκτρο, π.χ. όταν
// αποκρύπτουμε τη διαφήμιση να υποδεικνύουμε το πλήκτρο επανεμφάνισης. Η μέθοδος
// μπορεί να δεχτεί λίστα παραμέτρων με properties "img" και "dur" για την εικόνα
// και τη διάρκεια αντίστοιχα.

Cpliktro.prototype.spotit = function(opt) {
	var prev, pliktro = this, dom = this.cpliktroGetDOM();

	if (opt === undefined) opt = {};
	if (!opt.hasOwnProperty('img')) opt.img = 'endixi/svisimo.gif';
	if (!opt.hasOwnProperty('dur')) opt.dur = 1000;

	// Αν έχουμε ήδη δρομολογημένη επαναφορά από προηγούμενη στιγμιαία υπόδειξη,
	// πρέπει να την ακυρώσουμε.

	prev = dom.data('spotit');
	if (prev) clearTimeout(prev);

	this.ikona(opt.img);
	dom.data('spotit', setTimeout(function() {
		pliktro.ikona();
		dom.removeData('spotit');
	}, opt.dur));

	return this;
}

Cpliktro.prototype.working = function(img, delay) {
	var cpliktro = this;

	if (img === undefined) img = 'default.gif';
	this.ikona('working/' + img);
	if (delay) setTimeout(function() {
		cpliktro.ikona();
	}, delay);
	return this;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Η μέθοδος "cpanelAdd" προσθέτει control panel στο σκηνικό. Το control panel περιλαμβάνει
// τα παρακάτω properties:
//
//	cpanel		Array με όλα τα πλήκτρα του control panel.
//
//	cpanelOmada	Η τρέχουσα ομάδα πλήκτρων του control panel.
//
//	cpanelOmadaMax	Ο μέγιστος αριθμός ομάδας που εμφανίζεται στα πλήκτρα του control
//			panel (υπολογίζεται αυτόματα).

Skiniko.prototype.cpanelAdd = function() {
	var skiniko = this, cpanelDOM = this.cpanelDOM;

	// TODO
	// Αν εμφανιστεί τέτοιο πρόβλημα θέλω να το ξέρω.

	if (this.cpanelGet()) globals.fatal('Υπάρχει ήδη το control panel');

	// Τα πλήκτρα τού control panel είναι διαρθρωμένα σε ομάδες. Οι ομάδες είναι ακέραιοι
	// αριθμοί με την πρώτη ομάδα να φέρει τον αριθμό 0. Ο χρήστης έχει τη δυνατότητα να
	// προβάλλει την επόμενη ομάδα εργαλείων κάνοντας κλικ στο πλήκτρο εναλλαγής εργαλείων
	// που εμφανίζεται πάντα στην κορυφή τού control panel. Μετά την τελευταία ομάδα
	// εμφανίζεται και πάλι η πρώτη ομάδα κοκ. Παρέχονται, επίσης, στην κορυφή και στην
	// ουρά του control panel πλήκτρα με τα οποία ο χρήστης μπορεί να επανεμφανίσει την
	// πρώτη ομάδα εργαλείων.

	this.cpanelOmada = 0;

	this.cpanel = [

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	n: 'enalagi',
	t: 'Εναλλαγή εργαλείων',
	i: 'cpanel/enalagi.png',
	a: function(e) {
		skiniko.cpanelOmada++;
		if (skiniko.cpanelOmada > skiniko.cpanelOmadaMax) skiniko.cpanelOmada = 0;
		skiniko.refreshCpanelDOM();
	},
}),

new Cpliktro({
	t: 'Αρχική σειρά εργαλείων',
	i: 'mazema/pano.png',
	a: function(e) {
		skiniko.cpanelOmada = 0;
		skiniko.refreshCpanelDOM();
	},
	c: function(skiniko) {
		return skiniko.cpanelOmada;
	},
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	o: 0,
	t: 'Reset',
	i: 'cpanel/reset.png',
	a: function(e) {
		this.spotit({
			img: 'working/arrows.gif',
			dur: 500,
		});
		client.node('reset');
	},
	c: function() {
		return true;
	},
}),

new Cpliktro({
	o: 0,
	n: 'thesi',
	t: 'Αλλαγή θέσης',
	i: 'cpanel/thesi.png',
	a: function(e) {
		var pliktro = this.working();
		client.fyi.pano('Αλλαγή θέσης. Παρακαλώ περιμένετε…');
		client.node('thesiRoloi', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria, trapezi) {
		var thesi;

		if (!trapezi) return false;
		if (sinedria.isTheatis()) return true;
		if (trapezi.partida.length) return false;

		thesi = sinedria.thesiGet();
		if (!thesi) return false;

		return trapezi.keniThesi(thesi);
	},
}),

new Cpliktro({
	o: 0,
	n: 'pektisTheatis',
	t: 'Εναλλαγή παίκτη/θεατή',
	i: 'cpanel/theatis.png',
	a: function(e) {
		var pliktro = this.working();
		client.fyi.pano('Εναλλαγή παίκτη/θεατή. Παρακαλώ περιμένετε…');
		client.node('pektisTheatis', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria, trapezi) {
		if (!sinedria) return false;
		if (sinedria.isPektis()) return true;
		if (!trapezi) return false;
		if (!trapezi.kalesmenosEgo()) return false;
		return !trapezi.pektisGet(sinedria.thesiGet());
	},
}),

new Cpliktro({
	o: 0,
	n: 'apodoxi',
	t: 'Αποδοχή όρων',
	i: 'cpanel/apodoxi.png',
	a: function(e) {
		var pliktro = this.working();
		client.fyi.pano('Αποδοχή όρων παρτίδας. Παρακαλώ περιμένετε…');
		client.node('apodoxi', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria, trapezi) {
		if (!sinedria) return false;
		if (sinedria.oxiPektis()) return false;

		switch (trapezi.tabloGet().fasiGet()) {
		case 'ΚΑΤΑΣΚΕΥΗ':
		case 'ΔΙΑΠΡΑΓΜΑΤΕΥΣΗ':
		case 'ΣΤΗΣΙΜΟ':
		case 'ΤΕΛΟΣ':
			break;
		default:
			return false;
		}

		if (trapezi.apodoxiGet(sinedria.thesiGet()).isNai()) return false;

		if (trapezi.apodoxes(1) == geister.thesiMax)
		this.
		//emfanes().
		ikona('cpanel/go.png').
		titlos('Αποδοχή όρων και εκκίνηση της παρτίδας');

		else
		this.
		//emfanes(false).
		ikona().
		titlos();

		return true;
	},
}),

new Cpliktro({
	o: 0,
	n: 'ixodopa',
	t: 'Επαναδιαπραγμάτευση όρων',
	i: 'cpanel/ixodopa.png',
	a: function(e) {
		var pliktro = this.working();
		client.fyi.pano('Επαναδιαπραγμάτευση όρων παρτίδας. Παρακαλώ περιμένετε…');
		client.node('ixodopa', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria, trapezi) {
		if (!sinedria) return false;
		if (sinedria.oxiPektis()) return false;

		switch (trapezi.tabloGet().fasiGet()) {
		case 'ΔΙΑΠΡΑΓΜΑΤΕΥΣΗ':
		case 'ΣΤΗΣΙΜΟ':
		case 'ΤΕΛΟΣ':
			break;
		default:
			return false;
		}

		if (trapezi.apodoxiGet(sinedria.thesiGet()).oxiNai()) return false;
		return true;
	},
}),

new Cpliktro({
	o: 0,
	t: 'Καφετζής',
	i: 'cpanel/kafedaki.png',
	a: function(e) {
	},
}),

new Cpliktro({
	o: 0,
	t: 'Ηχητικό σήμα',
	i: 'cpanel/korna.png',
	a: function(e) {
	},
}),

new Cpliktro({
	o: 0,
	t: 'Ξέρετε ότι…',
	i: 'cpanel/lamp.png',
	a: function(e) {
	},
	c: function(skiniko, sinedria) {
		if (!sinedria) return false;
		return sinedria.isRebelos();
	},
}),

new Cpliktro({
	o: 0,
	n: 'trapeziNeo',
	t: 'Νέο τραπέζι',
	i: 'cpanel/neoTrapezi.png',
	a: function(e) {
		var pliktro = this.working();
		client.fyi.pano('Δημιουργία τραπεζιού. Παρακαλώ περιμένετε…');
		client.node('trapeziNeo', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria) {
		return sinedria;
	},
}),

new Cpliktro({
	o: 0,
	t: 'Έξοδος από το τραπέζι',
	i: 'cpanel/exodos.png',
	a: function(e) {
		var pliktro = this, trapezi, pektis,

		sinedria = skiniko.sinedriaEgo();
		if (!sinedria) return;

		trapezi = skiniko.trapeziGet(sinedria.trapeziGet());
		if (!trapezi) return;

		this.working();
		client.fyi.pano('Έξοδος από το τραπέζι. Παρακαλώ περιμένετε…');
		client.node('trapeziExodos', function(xhr) {
			pliktro.ikona();
			if (xhr.sfalma) return;
			client.fyi.spano(xhr.responseText);
		});
	},
	c: function(skiniko, sinedria, trapezi) {
		return trapezi;
	},
}),

new Cpliktro({
	o: 0,
	t: 'Φρεσκάρισμα του σκηνικού',
	i: 'cpanel/bugFix.png',
	a: function(e) {
		this.working('arrowsPrasino.gif', 800);
		skiniko.skinikoRefreshDOM();
	},
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	o: 1,
	n: 'emoticonOn',
	t: 'Εμφάνιση emoticons',
	i: 'emoticon/set0/xamogelo.png',
	a: function(e) {
		skiniko.setOpt('emoticon', true);
		skiniko.sizitisiDOM.finish().animate({
			maxWidth: '-=40px',
		}, 80);
		skiniko.emoticonDOM.finish().animate({
			width: '40px',
		}, 100);
		skiniko.
		refreshCpanelDOM().
		cpliktroBlinkit('emoticonOff');
	},
	c: function(skiniko) {
		return !skiniko.getOpt('emoticon');
	},
}),

new Cpliktro({
	o: 1,
	n: 'emoticonOff',
	t: 'Απόκρυψη emoticons',
	i: 'emoticon/set0/alien.png',
	a: function(e) {
		skiniko.setOpt('emoticon', false);
		skiniko.emoticonDOM.finish().animate({
			width: 0,
		}, 80);
		skiniko.sizitisiDOM.finish().animate({
			maxWidth: '+=40px',
		}, 100);
		skiniko.
		refreshCpanelDOM().
		cpliktroBlinkit('emoticonOn');
	},
	c: function(skiniko) {
		return skiniko.getOpt('emoticon');
	},
}),

new Cpliktro({
	o: 1,
	n: 'diafimisiOn',
	t: 'Εμφάνιση διαφημίσεων',
	i: 'cpanel/diafimisiOn.png',
	a: function(e) {
		var diafimisi = $('#diafimisi');
		if (!diafimisi.length) return;

		skiniko.setOpt('diafimisi', true);
		skiniko.refreshCpanelDOM();
		diafimisi.finish().slideDown();
		skiniko.cpliktroSpotit('diafimisiOff');
	},
	c: function(skiniko) {
		return $('#diafimisi').length && !skiniko.getOpt('diafimisi');
	},
}),

new Cpliktro({
	o: 1,
	n: 'diafimisiOff',
	t: 'Απόκρυψη διαφημίσεων',
	i: 'cpanel/diafimisiOff.png',
	a: function(e) {
		var diafimisi = $('#diafimisi');
		if (!diafimisi.length) return;

		skiniko.setOpt('diafimisi', false);
		skiniko.refreshCpanelDOM();
		diafimisi.finish().slideUp();
		skiniko.cpliktroSpotit('diafimisiOn');
	},
	c: function(skiniko) {
		return $('#diafimisi').length && skiniko.getOpt('diafimisi');
	},
}),

new Cpliktro({
	o: 1,
	n: 'motdOn',
	t: 'Εμφάνιση μηνύματος ημέρας',
	i: 'cpanel/motdOn.png',
	a: function(e) {
		var motd = $('#motd');
		if (!motd.length) return;

		skiniko.setOpt('motd', true);
		skiniko.refreshCpanelDOM();
		motd.finish().slideDown();
		skiniko.cpliktroSpotit('motdOff');
	},
	c: function(skiniko) {
		return $('#motd').length && !skiniko.getOpt('motd');
	},
}),

new Cpliktro({
	o: 1,
	n: 'motdOff',
	t: 'Απόκρυψη μηνύματος ημέρας',
	i: 'cpanel/motdOff.png',
	a: function(e) {
		var motd = $('#motd');
		if (!motd.length) return;

		skiniko.setOpt('motd', false);
		skiniko.refreshCpanelDOM();
		motd.finish().slideUp();
		skiniko.cpliktroSpotit('motdOn');
	},
	c: function(skiniko) {
		return $('#motd').length && skiniko.getOpt('motd');
	},
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	o: 2,
	t: 'Demo δημιουργίας 10 τραπεζιών',
	i: 'endixi/puzzle.gif',
	a: function(e) {
		var pliktro = skiniko.cpliktroGet('trapeziNeo');
		for (var i = 0; i < 10; i++) {
			pliktro.cpliktroGetDOM().trigger('click');
		}
	},
	c: function(skiniko, sinedria) {
		return sinedria;
	},
}),

new Cpliktro({
	o: 2,
	t: 'TEST',
	i: 'endixi/asteraki.gif',
	a: null,
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	o: 3,
	t: 'TEST',
	i: 'endixi/papi.gif',
	a: null,
}),

new Cpliktro({
	o: 3,
	t: 'TEST',
	i: 'endixi/svisimo.gif',
	a: null,
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	o: 4,
	t: 'TEST',
	i: 'endixi/balitsa.gif',
	a: null,
}),

new Cpliktro({
	o: 4,
	t: 'TEST',
	i: 'endixi/edoPata.gif',
	a: null,
}),

new Cpliktro({
	o: 4,
	t: 'TEST',
	i: 'endixi/nevrikos.gif',
	a: null,
}),

new Cpliktro({
	o: 4,
	t: 'TEST',
	i: 'endixi/edoKita.gif',
}),

new Cpliktro({
	o: 4,
	t: 'TEST',
	i: 'endixi/erotimatiko.gif',
	a: null,
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

new Cpliktro({
	t: 'Αρχική σειρά εργαλείων',
	i: 'mazema/kato.png',
	a: function(e) {
		skiniko.cpanelOmada = 0;
		skiniko.refreshCpanelDOM();
	},
	c: function(skiniko) {
		return skiniko.cpanelOmada;
	},
}),

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@
	];

	// Κατά την ένταξη των πλήκτρων στο DOM θα κρατήσουμε τον μέγιστο αριθμό ομάδας
	// στο property "cpanelOmadaMax", ώστε να γνωρίζουμε πότε θα κλείνει ένα κύκλος
	// εναλλαγής εργαλείων.

	this.cpanelOmadaMax = 0;

	cpanelDOM.empty();
	this.cpanelWalk(function() {
		var omada;

		cpanelDOM.append(this.cpliktroGetDOM());
		if (this.oxiOmada()) return;

		omada = this.omadaGet();
		if (omada > skiniko.cpanelOmadaMax) skiniko.cpanelOmadaMax = omada;
	});

	return this;
}

Skiniko.prototype.isCpanel = function() {
	return this.hasOwnProperty('cpanel');
}

Skiniko.prototype.oxiCpanel = function() {
	return !this.isCpanel();
}

Skiniko.prototype.cpanelGet = function() {
	return this.cpanel;
}

Skiniko.prototype.cpanelOmadaGet = function() {
	return this.cpanelOmada;
}

// Με την μέθοδο "cpanelWalk" διατρέχουμε όλα τα πλήκτρα του control panel εφαρμόζοντας
// σε κάθε πλήκτρο, ως μέθοδο, την function που περνάμε ως παράμετρο.

Skiniko.prototype.cpanelWalk = function(callback) {
	var cpanel, i;

	if (this.oxiCpanel()) return this;

	cpanel = this.cpanelGet();
	for (i = 0; i < cpanel.length; i++) {
		callback.call(cpanel[i]);
	}

	return this;
}

// Η μέθοδος "cpliktroGet" δέχεται την ονομασία κάποιου πλήκτρου του control panel και
// επιστρέφει το ίδιο το πλήκτρο εφόσον υπάρχει, αλλιώς επιστρέφει null.

Skiniko.prototype.cpliktroGet = function(tag) {
	var cpanel, i;

	if (this.oxiCpanel()) return null;

	cpanel = this.cpanelGet();
	for (i = 0; i < cpanel.length; i++) {
		if (cpanel[i].onomaGet() == tag) return cpanel[i];
	}

	return null;
}

// Η μέθοδος "cpliktroCall" δέχεται την ονομασία κάποιου πλήκτρου τού control panel και
// εφόσον το πλήκτρο υπάρχει εφαρμόζει ως μέθοδο σε αυτό την callback function την οποία
// περνάμε ως δεύτερη παράμετρο.

Skiniko.prototype.cpliktroCall = function(tag, func) {
	var pliktro = this.cpliktroGet(tag);
	if (pliktro) func.call(pliktro);
	return this;
}

// Η μέθοδος "cpliktroSpotit" δέχεται την ονομασία κάποιου πλήκτρου τού control panel
// και εφόσον το πλήκτρο υπάρχει το κάνει στιγμιαία εμφανές.

Skiniko.prototype.cpliktroSpotit = function(tag, opt) {
	return this.cpliktroCall(tag, function() {
		this.spotit(opt)
	});
}

// Η μέθοδος "cpliktroBlinkit" δέχεται την ονομασία κάποιου πλήκτρου τού control panel
// και εφόσον το πλήκτρο υπάρχει το κάνει στιγμιαία εμφανές με αστεράκι.

Skiniko.prototype.cpliktroBlinkit = function(tag) {
	return this.cpliktroCall(tag, function() {
		this.spotit({
			img: 'endixi/asteraki.gif',
			dur: 200,
		});
	});
}
